// 版权归 瞄你个汪 所有。使用本代码应遵守相关法律法规和Apache 2.0开源许可要求。
package top.geeke.config;

import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.SM2;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * <p>
 *  应用配置类
 * </p>
 * @author 瞄你个汪
 * @since 2024/5/29 12:55
 */
@Data
@Component
@ConfigurationProperties(value = "app")
public class AppConfiguration {
    /**
     * 应用名称
     */
    private String name;
    /**
     * 应用简称
     */
    private String abbr;
    /**
     * 版本号
     */
    private String version;
    /**
     * 验证码配置
     */
    private AppConfiguration.Captcha captcha;
    /**
     * 密码配置
     */
    private AppConfiguration.CryptogramOption cryptogram;

    @Data
    public static class Captcha {
        /**
         * 干扰线
         */
        private int thickness;
        /**
         * 操作数位数
         */
        private int numLength;
    }

    @Data
    public static class CryptogramOption {
        /**
         * 是否开启强密码验证
         */
        private Boolean strongPassword;
        /**
         * 最大认证失败次数
         */
        private Integer maxAuthFailures;
        /**
         * 强密码验证规则
         */
        private String passwordStrengthValidation;
        /**
         * 强密码验证提示
         */
        private String passwordStrengthValidationMsg;
        /**
         * 加密算法
         */
        private String cryptoType;
        /**
         * 公钥
         */
        private String publicKey;
        /**
         * 私钥
         */
        private String privateKey;
    }

    /**
     * 国密加解密对象
     */
    @Bean
    public SM2 cryptogram() {
        String privateKey = cryptogram.getPrivateKey();
        String publicKey = cryptogram.getPublicKey();
        return SmUtil.sm2(privateKey, publicKey);
    }
}
